import sun.security.x509.AVA;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-10-02
 * Time: 22:09
 */
public class Solution {
    public int longestArithSeqLength(int[] nums) {
        // 得到最大值与最小值
        int max = nums[0];
        int min = nums[0];
        for (int x: nums) {
            max = Math.max(max, x);
            min = Math.min(min, x);
        }
        int sub = max - min;
        int ans = 1;
        // 等差数列的差值 的范围: -最大差值 ~ +最大差值
        for (int diff = -sub; diff <= sub; diff++) {
            int[] dp = new int[max+1]; // dp[i] 表示 值 i 在 差值为 diff 的等差数列中是第几个数字
            for (int x: nums) {
                int prev = x - diff; // 前一个值
                if (min <= prev && prev <= max && dp[prev] != 0) {
                    dp[x] = dp[prev] + 1; // 这个值的位次就是它 前面那个值的位次 + 1
                    ans = Math.max(ans, dp[x]); // 更新等差数列的最大长度
                } else {
                    // 前一个值不存在
                    dp[x] = 1; // 那么这个值就是所在等差数列中的第一个值
                }
            }
        }
        return ans;
    }
}